#访问列表元素
'''
list = [66.25, 333, 333, 1, 1234.5]
print(list[0])                          #[66.25, 333, 333, 1, 1234.5]
#遍历元素
k = 0
while k < len(list):
    print(list[k])
    k += 1                              #or count = count + 1

for x in list :
    print(x) 

for i, v in enumerate(list):
    print(i, v)                       
'''

#同时遍历两个或更多的序列
'''
questions = ['name', 'quest', 'favorite color']
answers = ['lancelot', 'the holy grail', 'blue']
for q, a in zip(questions, answers):
    print('{0} ----- {1}.'.format(q, a))
'''

#list.append(x)  添加元素，相当js中push
'''
list = [66.25, 333, 333, 1, 1234.5]
print(list)         #[66.25, 333, 333, 1, 1234.5]
list.append(333)    #把一个元素添加到列表的结尾
print(list)         #[66.25, 333, 333, 1, 1234.5, 333]
'''

#list.extend(L) 扩展数字，合并两个数组为一个数组
'''
list = [66.25, 333, 333, 1, 1234.5]
print(list)             #[66.25, 333, 333, 1, 1234.5]
list.extend([6, 5, 333])
print(list)             #[66.25, 333, 333, 1, 1234.5, 6, 5, 333]
'''

#list.insert(i, x)  在制定索引位置插入元素
'''
list = [66.25, 333, 333, 1, 1234.5]
print(list)             #[66.25, 333, 333, 1, 1234.5]
list.insert(2, 666)
print(list)             #[66.25, 333, 666, 333, 1, 1234.5]
'''

#list.remove(x)   删除值为x的元素
'''
list = [66.25, 333, 666, 333, 1, 1234.5]
print(list)             #[66.25, 333, 666, 333, 1, 1234.5]
list.remove(666)
print(list)             #[66.25, 333, 333, 1, 1234.5]
'''

#list.pop([i])  删除数组中指定索引的元素，并返回删除的元素
'''
list = [66.25, 333, 666, 333, 1, 1234.5]
print(list.pop())            #1234.5，默认删除的事数组最后一个元素
print(list)                 #[66.25, 333, 666, 333, 1]
print(list.pop(2))          #666， 删除制定索引的元素
print(list)                 #[66.25, 333, 333, 1]
'''

#list.clear()	移除列表中的所有项,清空列表
'''
list = [66.25, 333, 666, 333, 1, 1234.5]
print(list)             #[66.25, 333, 666, 333, 1, 1234.5]
list.clear()
print(list)             #[]
'''

#list.index(x)	返回列表中值为 x 的元素的索引。如果没有匹配的元素就会返回一个错误。
'''
list = [66.25, 333, 666, 333, 1, 1234.5]
print(list.index(333))      #1
'''

#list.count(x)	返回 x 在列表中出现的次数。
'''
list = [66.25, 333, 666, 333, 1, 1234.5]
print(list.count(333))      #2
'''

#list.sort()	对列表中的元素进行排序。从小到大
'''
list = [66.25, 333, 666, 333, 1, 1234.5]
list.sort()
print(list)                 #[1, 66.25, 333, 333, 666, 1234.5]
'''

#list.reverse() 倒排列表中的元素。  列表顺序颠倒
'''
list = [66.25, 333, 666, 333, 1, 1234.5]
list.reverse()
print(list)
'''

#list.copy() 数组浅拷贝
'''
list = [66.25, 333, 666, 333, 1, 1234.5]
list2 = list.copy()#拷贝一个新数组，赋值给list2
list2.pop(0)
print(list)         #[66.25, 333, 666, 333, 1, 1234.5]
print(list2)        #[333, 666, 333, 1, 1234.5]
'''

#嵌套列表解析，解析成这样的数据结构[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
matrix = [
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9, 10, 11, 12],
]

#复杂写法
'''
list = []
for i in range(4):
    newList = []
    for x in matrix:
        newList.append(x[i])
    list.append(newList)
print(list)                     #[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
'''

#简单写法
'''
list = [[row[i] for row in matrix] for i in range(4)] #for i in range(4)：便利列表得到 i,for row in matrix得到row
print(list)                     #[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
'''

#另一种写法
'''
list = []
for i in range(4):
    list.append([row[i] for row in matrix])
print(list)                     #[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
'''

#js写法
'''
var matrix = [
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9, 10, 11, 12],
]

var list = []
for(var i = 0; i<4; i++){
    var newList = []
    for(var j = 0; j < matrix.length; j++){
        newList.push(matrix[j][i])
    }
    list.push(newList)
}
console.log(list)
'''



#del 语句,删除数组制定的元素
'''
a = [-1, 1, 66.25, 333, 333, 1234.5]
print(a)    #[-1, 1, 66.25, 333, 333, 1234.5]
del a[0]
print(a)    #[1, 66.25, 333, 333, 1234.5]
del a[:]    #删除全部元素，清空数组
print(a)    #[]
del a       #删除实体变量
'''

#元组和序列
'''
t = (12345, 54321, 'hello!')  #元组由若干逗号分隔的值组成
print(t[0])
u = t, (1, 2, 3, 4, 5)        #有序元组
print(u)                      #((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))
'''


#集合
'''
集合是一个无序不重复元素的集。基本功能包括关系测试和消除重复元素。
可以用大括号({})创建集合。注意：如果要创建一个空集合，你必须用 set() 而不是 {} ；后者创建一个空的字典，下一节我们会介绍这个数据结构。
只能是字符类型
'''
'''
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
print(basket)               #{'pear', 'apple', 'banana', 'orange'}  会自动去掉重复元素
print('orange' in basket)   #True   检测orange这个元素是否在这个几个中

a = set('abracadabra')
b = set('alacazam')
print(a)                    #创建一个集合 {'r', 'a', 'b', 'c', 'd'}
print(b)                    #创建一个集合 {'c', 'l', 'z', 'm', 'a'}
print(a - b)                #在 a 中的字母，但不在 b 中 {'d', 'r', 'b'}
print(a | b )               #在 a中 或 b中 的字母 {'d', 'a', 'c', 'r', 'l', 'm', 'b', 'z'}
print(a & b)                #在 a 和 b 中都有的字母 {'a', 'c'}
print(a ^ b)                #在 a 或 b 中的字母，但不同时在 a 和 b 中 {'l', 'z', 'b', 'd', 'r', 'm'}
c = {x for x in 'abracadabra' if x not in 'abc'}# or set('abracadabra') - set('abc')
print(c)                    #{'r', 'd'}
#遍历集合
for d in c:
    print (d)

'''



#字典dict
'''
tel = {'jack': 4098, 'sape': 4139}  #创建一个字典，有点像js中的对象
tel['guido'] = 4127                 #添加属性值
print(tel)                          #{'jack': 4098, 'sape': 4139, 'guido': 4127}
print(tel['jack'])                  #访问属性值
del tel['jack']                     #删除属性值
print(tel)                          #{'sape': 4139, 'guido': 4127}
print(list(tel.keys()))             #返回一个属性key的数组 ['sape', 'guido']
print(list(tel.values()))           #返回一个属性值的数组  [4139, 4127]

print(sorted(tel.keys()))           #用sort函数对列表排序时会影响列表本身，而sorted不会。 ['guido', 'sape']
print('guido' in tel )              #判断 guido 元素是否在字典中，返回布尔值， True
#dict() 直接从键值对元组列表中构建字典
a = dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
print(a)                            #{'sape': 4139, 'guido': 4127, 'jack': 4098}
#遍历字典
knights = {'gallahad': 'the pure', 'robin': 'the brave'}
print(knights.items())              #返回数组元组 [('gallahad', 'the pure'), ('robin', 'the brave')]
for k, v in knights.items():
    print(k, v)
'''

